from modules import *
import random

class 探头管理(Page_Object):
    def __init__(self, page: Page):
        super().__init__(page)
        self.请选择所属区域 = self.page.get_by_placeholder("请选择").nth(0)
        self.选择区域 = self.page.locator(".el-cascader-node__label")
        self.选择街道 = self.page.locator(".el-radio__inner").nth(1)  # 1-14
        self.选择社区 = self.page.locator(".el-radio__inner").nth(15)  #  15-到后面
        self.请输入设备名称 = self.page.get_by_placeholder("请输入设备名称").nth(0)  # 可用来对下拉框选择后进行确定

        self.请选择设备类型 = self.page.get_by_placeholder("请选择设备类型")
        self.请选择收藏组 = self.page.get_by_placeholder("请选择收藏组")

        self.查询 = self.page.get_by_text("查询")
        self.重置 = self.page.get_by_text("重置")

        self.暂无数据 = self.page.locator(".el-table__empty-text")
        self.搜索结果第二列 = self.page.locator(".el-table__body-wrapper").locator("tbody").locator("tr").nth(0).locator("td").nth(1)


    def navigate(self):
        self.跳转("/probe/probe-list")

    def search_搜索(self, 设备名称):
        self.请选择所属区域.click()
        self.选择区域.click()
        self.选择街道.click()
        self.选择社区.click()
        self.请输入设备名称.click()
        self.查询.click()
        # 使用 expect 进行断言，更符合 Playwright 风格
        try:
            # 先检查"暂无数据"元素是否可见且文本匹配
            expect(self.暂无数据).to_be_visible()
            expect(self.暂无数据).to_have_text("暂无数据")
            print("确认：暂无数据")
        except Exception:
            # 如果"暂无数据"不满足条件，则期望搜索结果可见
            print("数据存在，等待搜索结果...")
            expect(self.搜索结果第二列).to_be_visible()
            print("搜索结果已显示")
        self.重置.click()

        self.请选择设备类型.click()
        请选择设备类型列表 = self.page.locator(".el-select-dropdown__list").nth(2).locator("li")
        count = 请选择设备类型列表.count()  # 注意：Playwright 中 count() 是异步方法
        if count > 0:
            # 随机选择一个索引
            random_index = random.randint(0, count - 1)
            # 点击对应的 li
            请选择设备类型列表.nth(random_index).click()
        self.查询.click()
        try:
            # 先检查"暂无数据"元素是否可见且文本匹配
            expect(self.暂无数据).to_be_visible()
            expect(self.暂无数据).to_have_text("暂无数据")
            print("确认：暂无数据")
        except Exception:
            # 如果"暂无数据"不满足条件，则期望搜索结果可见
            print("数据存在，等待搜索结果...")
            expect(self.搜索结果第二列).to_be_visible()
            print("搜索结果已显示")
        self.重置.click()

        self.请选择收藏组.click()
        请选择收藏组 = self.page.locator(".el-select-dropdown__list").nth(2).locator("li")
        count = 请选择收藏组.count()  # 注意：Playwright 中 count() 是异步方法
        if count > 0:
            # 随机选择一个索引
            random_index = random.randint(0, count - 1)
            # 点击对应的 li
            请选择收藏组.nth(random_index).click()
        try:
            # 先检查"暂无数据"元素是否可见且文本匹配
            expect(self.暂无数据).to_be_visible()
            expect(self.暂无数据).to_have_text("暂无数据")
            print("确认：暂无数据")
        except Exception:
            # 如果"暂无数据"不满足条件，则期望搜索结果可见
            print("数据存在，等待搜索结果...")
            expect(self.搜索结果第二列).to_be_visible()
            print("搜索结果已显示")
        self.重置.click()

        self.请输入设备名称.fill(设备名称)
        self.查询.click()
        try:
            # 先检查"暂无数据"元素是否可见且文本匹配
            expect(self.暂无数据).to_be_visible()
            expect(self.暂无数据).to_have_text("暂无数据")
            print("确认：暂无数据")
        except Exception:
            # 如果"暂无数据"不满足条件，则期望搜索结果可见
            print("数据存在，等待搜索结果...")
            expect(self.搜索结果第二列).to_be_visible()
            print("搜索结果已显示")
        self.重置.click()
